/**
 ************************************************************************************************************
 * 
 ************************************************************************************************************
 * @file RBD3D9FXLibrary.h
 ************************************************************************************************************/

#ifndef __RBD3D9FXLIBRARY__H__
#define __RBD3D9FXLIBRARY__H__

#ifdef  HEADER_ONCE
#pragma HEADER_ONCE
#endif

#ifdef  HEADER_MSG
#pragma HEADER_MSG(RBD3D9FXLibrary.h)
#endif

/************************************************************************************************************
 * Includes
 ************************************************************************************************************/
#include <RBMain/RBCodecFactory.h>
#include <RBMain/RBTechnique.h>

/************************************************************************************************************
 * Forward declarations
 ************************************************************************************************************/
class RBD3D9Renderer;
class RBD3D9FXTechnique;

/************************************************************************************************************
 * Class
 ************************************************************************************************************/

class RBD3D9FXLibrary : public RBCodec<RBTechnique>
{
public:
				            RBD3D9FXLibrary		(RBD3D9Renderer* pRenderer);
	virtual	               ~RBD3D9FXLibrary		();
	
    virtual void            Read                (const RBString& strFilename, std::vector<RBTechnique*>& vTechniques);

private:
    virtual void            OnReset             (bool bBeforeReset);

    struct Effect
    {
        std::vector<RBD3D9FXTechnique*> m_vTechniques;
        ID3DXEffect* m_pEffect;
        RBString m_strFilename;
    };

    bool                    BuildEffect         (Effect& effect, bool bCreateTechniques = true);

private:

    std::vector<Effect>   m_aEffectsCreated;
    RBD3D9Renderer* m_pRenderer;
};

/************************************************************************************************************/

#endif // __RBD3D9FXLIBRARY__H__
